//输入一个链表的头节点，从尾到头反过来返回每个节点的值（用数组返回）。 
//
// 
//
// 示例 1： 
//
// 输入：head = [1,3,2]
//输出：[2,3,1] 
//
// 
//
// 限制： 
//
// 0 <= 链表长度 <= 10000 
// Related Topics 链表 
// 👍 48 👎 0

package leetcode.editor.cn;

import common.bean.ListNode;
import common.util.MyUtil;

import java.util.ArrayList;
import java.util.List;

/**
 * Java：从尾到头打印链表
 *
 * @author changgui
 */
@SuppressWarnings("all")
public class P剑指_offer_06_CongWeiDaoTouDaYinLianBiaoLcof {
    public static void main(String[] args) {
        Solution solution = new P剑指_offer_06_CongWeiDaoTouDaYinLianBiaoLcof().new Solution();
        // TODO 此处开始你的表演
        ListNode node = MyUtil.createNode(1, 2, 3, 4, 5, 6);
        int[] arr = solution.reversePrint(node);
        MyUtil.printInt(arr);
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public int[] reversePrint(ListNode head) {
            // 类似二叉树的后序遍历
            List<Integer> list = new ArrayList<>();
            traverse(head, list);
            int[] arr = new int[list.size()];
            for (int i = 0; i < arr.length; i++) {
                arr[i] = list.get(i);
            }
            return arr;
        }

        private void traverse(ListNode head, List<Integer> list) {
            if (head == null) {
                return;
            }
            traverse(head.next, list);
            list.add(head.val);
        }
    }
    //leetcode submit region end(Prohibit modification and deletion)

}